I made this video ages ago but forgot to post about it;
Basically it's a method to add dynamic parenting to a rig whilst avoiding cycle errors. The parenting in this demo is a hard switch - no blending. It could be modified to use 2 spaces and a blend between them which might be cool, who knows.
One nice thing about the approach it uses it that there is only an overhead for each unique space, not per object that has space switching. Compared to blended parent or orient constraints this has improved rig playback considerably.
If you ask nicely I'll make a video demoing how to set it up.