Я не вижу проблем в использовании Оперативного преобразования для работы со сложными объектами, вам нужно определить, какие операции поддерживает ваша система OT и как для них решается параллелизм
Например, если вы получаете две заметки «операция перемещения координат» от двух разных пользователей из одного и того же «состояния клиента», вам необходимо объединить оба состояния, возможно, отменяя вторую операцию.
Это то же самое поведение с текстом, когда два пользователя генерируют два обновления, чтобы удалить текстовый диапазон, который полностью или частично перекрывается (или может быть частично), второе обработанное обновление должно быть преобразовано в предыдущее, а результирующая операция только эффективно удалит часть оригинала (или полностью отменена с помощью 'no-op')
Вы можете взглянуть на это приятное объяснение того, как работает Google Wave Operational Transformation, и угадать с этого момента, как оно должно работать в вашей собственной реализации