Typically this is handled by registering `BeanDeserializerModifier`, overriding method `modifyDeserializer`. Doing this will give you access to the default deserializer, and you can construct your own deserializer to wrap it (or leave it as-is, if that makes sense).
But when deserializing, you can then figure out whether to handle the case yourself, or delegate.
This is somewhat cumbersome, but figuring out how to handle recursive/cyclic nature of things otherwise is surprisingly difficult problem to tackle at lib/framework level; partly because there isn't really a clear-cut concept of default deserializer as any module can add their own handlers, and every type down to java.lang.Object can have custom overrides.
Anyway, I think this would work for your case.
-+ Tatu +-
ps. Nice use of `getCurrentValue`; it is not widely known or used yet, but this is a good example of how it might be used -- well spotted.