Why not just check for "TNManager.isHost" for any logic on the ball code? There will always be only one host in a channel, and if ball is synced, you could pick other public vars of the ball code so all other players could access them (via their network instantiated copy of the ball) but only host actually "owns" it, and makes final judgement in logic. If host player leaves game, another automatically becomes host and logic is then controlled by that player.
Was thinking more on this... You could synch a variable like "lastKickedByPlayer" and set that variable from each player's copy of the ball, and make sure variable can be synced by all. The host logic could then, for instance, check that variable if ball hits a "score" trigger, and you'd know which player made the final kick, and scored the point. Etc... This scoring logic would be done on whichever player is currently the host. A score object could be set with points and sync he'd by all, as well. That way it's always up to date on all players, and if host changes, whichever player becomes host still has most current data to work with for game logic.
Each player has exactly the same code, it's just that the scoring and main game control logic always has to check if it is host first before executing any of it.