Just a guess: Somewhere along the line you are using the same global varable to hold the link/gun/avatar/whatever object. So when you setting up the avatars you are overwriting references to the link/whatever objects you need. Keep these things assoated with the avatars you create.
Code:
#Setting up avatar
avatar1.currentWeapon = avatar1.getChild("hand").add( 'gun.wrl')
.
.
.
#Swap in new weapon
tempWeapon = avatar1.currentWeapon
avatar1.currentWeapon = sidelinedWeapon
sidelinedWeapon = tempWeapon
avatar1.currentWeapon.parent( avatar1.getChild("hand") )
avatar1.currentWeapon.visible( viz.ON )
sidelinedWeapon.visible( viz.OFF )