Thanks for the effort, but it still needs some fixing:
The compat flag is the wrong way. The point with compat is that old code should continue to work without changes. With this patch it's still necessary to change some calls to get the old behavior back. (If you don't like the flag in new code then we could discuss controlling it with the pike compat level instead. It's a bit more cumbersome while migrating, but maybe less so later on.)
Afaik xmlrpc <struct>s and <array>s are fully recursive. It doesn't look like the magic_false replacement code handles that.
Shouldn't decode_call take the flag as well?
Still missing a corresponding checkin in 7.9, but it'll come when the dust has settled?