I'm not sure I understand/agree with what you are saying.When I last looked at SmartReferenceStream, it did two things that were bad:
(2) reshape code was placed in SRS itself, not in the class that is changing shape. The thing that is being deserialized (which is when problems become apparent) should be in charge of the change. It simplifies both packaging (fewer loose methods to consider, and reduced opportunity for name collisions) and it also helps with using proxies for special circumstances.