** WORKAROUND / SOLUTION **
I updated to the most recent recommend release (6.4.1.401) and added a data watcher and a custom packet handler. The basic approach is:
spawn parent entity on client side, parent spawns child entities
client sends spawn packet to server
server spawns parent entity and children
server sets parent entityId to match client, screws up child entityId's
child entities on server watch for change of entityId, update counter in parent when entityId changes
when all children on server have updated entityId, server sets flag in data watcher that syncs to client
when flag is set on client, client sends custom packet to update entityId's of children on server
server receives packet, updates entityId's of children
While testing I was seeing some weird things in my logs.
First problem: None of the data watchers appear to be sync'ing with the other end. I don't know if they're supposed to be unidirectional or bidirectional, but they don't seem to be working in either respect. I need to do some more research on this but, for now, I have a work-around (ugly kludge, but it works).
Second problem: When trying to update the client entityId's on the server side, I kept retrieving entity data from the client side.
I got utterly confused, and started drinking scotch. Which seems to have done the trick. At a minimum it didn't hurt and, in any event, I didn't stumble upon the solution until after I started drinking.
I'm using getEntityByID (with the entityId passed in the packet) to find the parent entity and retrieve the child entity list. For some reason unknown to me, within the confines of my PacketHandler, "WorldServer" returns entityId's from the client side, and "WorldClient" returns entityId's from the server side.
Code for PacketHandler follows. Note usage of getEntityByID, which is easily switched between wc (WorldClient) and ws (WorldServer).
Here's log from a run calling getEntityId from WorldServer:
...and here's the excerpt from calling getEntityId from WorldClient:
A couple items to note:
the server/client portion of the child entity name is set at instantiation, so there's no doubt that they're associated with one side or the other
log messages are comingled from multiple threads, illustrating the base problem and underscoring the need for a "real" fix (although I'm not sure there is one, and this approach may be the best option)
when SIDE == SERVER, isRemote is reversed from the client perspective -- ie, when you're on the server, "remote" is the client side
WorldClient and WorldServer appear to be backwards, at least from the perspective of getEntityByID
Verbosity for posterity, in the hopes that it may be useful for some other poor schmuck.