When I looked into writing my own implementation, the protocol seemed underspecified to me. "Do what synapse does" seemed to be the concensus.
This was a few years ago, so maybe things have improved. But given that no new feature complete servers have appeared, I doubt it.