Dynamic Parenting without Keying Constraints
In the Node Editor, add the Primary CTRL CRV, Global CTRL and Parenting CRV. Press tab to create a new node, and search for "blendColors". Blend Colors is a node that takes 2 attributes as input, combines them using a slider, and gives one output. We'll use it for combining the Translate values of Global CTRL and Parenting CRV.
Each input color can have a separate R, G and B value. For us, the Translate X, Y and Z values are automatically mapped to R, G and B.
Connect Global CTRL translate to Color 1, Parenting CRV translate to Color 2, and Output to Primary CTRL CRV's Translate. Create another node and repeat the process for rotation. When connecting rotation values to the blend colors node, Maya will automatically create a unitConversion node. This is because rotation values are in degrees, but blend colors needs a float value from 0 to 1.
When you're finished, you should have something that looks like this:
Add a new attribute to the Global Control:
Name: Prop Follow
Go back to the node editor, and connect this attribute to the blender attribute of both blend color nodes. Now this Prop Follow attribute can be animated to move the prop from the Global CTRL to the Parenting CRV based on requirements.
Select the Global CTRL, Shift select the Parenting CRV, go to Edit --> Transfer Attribute Values
This transfers the translate, rotate and scale values from Global CTRL to Parenting CRV. Deselect objects, and copy the script to shelf. Edit the shelf button, and copy the last line to the first line. This ensures that Maya will clear selection before running the rest of the script.
In this button, we want to do the exact opposite: transfer values from Parenting CRV to Global CTRL. To do this, simply copy the previous script, interchange the 2nd and 3rd lines, and make the following alteration:
This button can be useful when a character needs to put the prop down.
To generate this script, SHIFT select the Parenting CRV and go to Constrain --> Parent
Yes, you will get an error saying there were not enough target objects, but this is what we want. This way, when animating, we can simply select the character's control curve and click this button and voila! The rig is ready to use! Just be sure to remove the error line when converting the script to a shelf button. Also add the clear selection command from the previous buttons at the end of the script to make it cleaner.
On the 3rd button, be sure to SHIFT select the Parenting CRV. If you select it normally, then when you run the script, Parenting CRV will be the only object that is selected, resulting in the same error. We need to preserve existing selections for the constrain to set up properly.
After completing all of this, I ran into a small problem when animating with the rig. When you import this prop into another scene, the names of it's objects change, so you get an error when using the buttons. Now, if you're not going to change the name of the prop scene, then there's a simple way to get around this: