Thanks everyone for the help. I did a little of this and a little of that and everything works great! I'm going to post it here for all to enjoy!
EDIT: This script seems to work fine for individual poseballs as well although it is a little much for that.

// Multiple Linked Poseball Sync
// This script allows the automatic sync of multiple linked poseballs looping the same single animation. Works fine for individual poseballs as well.
// Place a copy of this script inside each poseball in linked set.
// Chat commands:
// /channel sync - Manual Sync of Poseballs
// /channel hide - Hides Poseballs
// /channel show - Shows Poseballs
//// Written by Zena Juran Nov.13th, 2008. No licensing expressed... do what you want with this code.

// ***** Change the Below Values to Suit Your Needs *****
list ANIMS = ["Dance 5"]; // Animation
string BUTTON = "Dance"; // Text of Pie Menu
string TITLE = "Dance"; // Hovering Text
vector ROTATION = <0,0,0>; // Avatar Rotation
vector OFFSET = <0,0,0.1>; // Avatar Position
integer CHANNEL = 1; // Chat Command Channel
integer LISTEN = TRUE; // Toggle Chat Listen
integer listener;
// ***** End of any necessary changes *****
start_listen()
{
llListenRemove(listener);
if (LISTEN==TRUE)
listener=llListen(CHANNEL,"",llDetectedKey(0),""

;
}
show()
{
llSetText(TITLE, <1.0,1.0,1.0> ,1.0);
llSetAlpha(1.0, ALL_SIDES);
}
hide()
{
llSetText("", ZERO_VECTOR, FALSE);
llSetAlpha(0.0, ALL_SIDES);
}
stopAnims()
{
llStopAnimation(llList2Key(ANIMS,0));
}
default
{
state_entry()
{
llSitTarget(OFFSET, llEuler2Rot(ROTATION * DEG_TO_RAD));
llSetSitText(BUTTON);
show();
start_listen();
}
on_rez(integer n)
{
llResetScript();
}
listen( integer channel, string name, key id, string message )
{
if (message=="hide"

{
hide();
}
else if (message=="show"

{
show();
}
}
timer()
{
stopAnims();
llSleep(1.0);
llStartAnimation(llList2String(ANIMS,0));
llSetTimerEvent(0);
state SAT;
}
changed(integer change)
{
if(change & CHANGED_LINK)
{
key avatar = llAvatarOnSitTarget();
if (llAvatarOnSitTarget()!=NULL_KEY)
{
llRequestPermissions(avatar, PERMISSION_TRIGGER_ANIMATION);
hide();
llMessageLinked( LINK_SET, TRUE, "", avatar);
llSetTimerEvent(0.1);
}
else if ((llGetPermissionsKey()!=NULL_KEY) && (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION))
{
show();
stopAnims();
}
}
}
run_time_permissions(integer perm)
{
key avatar = llAvatarOnSitTarget();
if(perm & PERMISSION_TRIGGER_ANIMATION)
{
stopAnims();
llStartAnimation(llList2String(ANIMS,0));
hide();
}
}
}
state SAT
{
state_entry()
{
start_listen();
}
link_message(integer sender_num, integer num, string str, key id)
{
if (num)
{
llSetTimerEvent(0.1);
}
}
listen( integer channel, string name, key id, string message )
{
if (message == "sync"

{
llSetTimerEvent(0.1);
}
if (message=="hide"

{
hide();
}
else if (message=="show"

{
show();
}
}
timer()
{
hide();
stopAnims();
llSleep(1.0);
llStartAnimation(llList2String(ANIMS,0));
llSetTimerEvent(0);
}
changed(integer change)
{
if(change & CHANGED_LINK)
{
if(llAvatarOnSitTarget()==NULL_KEY)
{
show();
stopAnims();
llResetScript();
}
}
}
}