Currently, the only way to know if any player has fully initialized is with the OnPlayerRestored event.
The easiest way for any single UdonBehaviour to know if any random player's PlayerObject/PlayerData is "ready" is by having a global singleton UdonBehaviour that uses OnPlayerRestored and a list, which is then queried by other behaviours.
It would be much simpler - both organizationally and performance wise - to have this function built into the API rather than having it implemented by creators and linked as an UdonBehaviour throughout everyone's' projects.