I want the host to handle all the AI processing and pass it to the rest of the players. If I pass a reference to an AI character object to another player's game I assume that this object in the host player's game has no connection to the same/equivalent object in the remote player's game (and I wont be able to tie the AI's generated action data to any of the remote player's characters).

I have an idea of how I would add unique IDs which are synced between players as these objects are created or as players enter the server.
But I am wondering if there's an inbuilt way of doing this like how the MultiplayerSynchronizer node works?

    KnightNine from my experience the MultiplayerSynchronizer node somehow just works, even if its not added to the scene..

    Ive done few surface level tests, with a buddy. We tried to remove sync node and it still synced all the objects in the world.

    IDk..

    But you should create RPC functions that recreate the object on the player side, you just pass the variables and it calls a function on player side and then sync its properties using the sync node.

    Maybe my wet nighmares can help you underestand https://godotforums.org/d/40012-synchronizing-multiplayer-3d-cameras-and-items-fail/6