The typical case where there are just unknown types in the first place isn't very interesting to this line of thought, I think. I agree that it might be an indication of how often that situation occurs, but not something supporting how often the reverse situation does not.
I may be hoping too much about being able to interleave levels who do know about types and levels who don't without losing type info. If one call passes along a richly typed value, which some generic middleman broker such as call_out or map (itself) isn't interested in to some third method which does have a strictly typed argument set, is the typing lost when passing through the middleman? On splicing a richly typed array into a similarly richly typed method being called?
I seem to recall having handled quite a lot of that kind of code when using Protocols.BitTorrent, though the details have fled me since. It more or less boiled down to passing bits of data of your own among a set of NIH callbacks to communicate state between your program parts, mediated by the Protocols.BitTorrent asynchronous prototocol driver. I suppose an easier approach for doing such code in general is the Roxen way, wrapping everything in some kind of state object, but I kind of like methods to have an intelligble argument signature.