Very interesting. Thank you for sharing this.
Come to think of it, perhaps I could play with one follow-up idea.
Jackson has "updateValue" functionality, in which one can do partial
'merge' of data, giving existing POJO: although this is currently just
a shallow update, it could (and should given time) be possible to
allow deep merges too.
Now: diff can obviously be viewed as the reverse of this... and might
not be super hard, using some of existing machinery.
-+ Tatu +-