That common approach is both elegant and tricky. It requires very precise clocks and time synchronization, as some non-commutative operations are order-dependent (such as list insertion).
That is why Google's TrueTime API (introduced in Spanner[0]) is such a big deal.
Actually, for most use cases, newest update wins is sufficient if it can be done on a fine granular basis (one property of an object/document).
It's what web applications have been doing for forever and being a 'realtime' framework doesn't change this if your use case isn't something like google docs.