Try this (very crude) procedure...
CODE
global proc holdShape(string $control){
string $shape[] = listRelatives -s $control
;
string $shapeOrig = rename $shape[0] ($shape[0]+"Orig")
;
string $newShape = createNode -p $control -n $shape[0] "nurbsCurve"
;
string $transformGeoNode = createNode "transformGeometry"
;
connectAttr -f ($shapeOrig+".local") ($transformGeoNode+".inputGeometry");
connectAttr -f ($control+".worldInverseMatrix[0]") ($transformGeoNode+".transform");
connectAttr -f ($transformGeoNode+".outputGeometry") ($newShape+".create");
setAttr ($shapeOrig+".intermediateObject") 1;
}
by the way, the above procedure only works for nurbsCurve control shapes....though, it could easily be extended to accept all shape types.
Once you have your control shape positioned how you want it, run -
CODE
holdShape "yourJointName";
Replace "yourJointName" with the actual name of the joint parent of the control shape.
Just keep in mind...any tweaks you want to apply to the control shape must be done to the original shape node (the one feeding into the transformGeometry node), otherwise you will get some wierd transformations when rotating and scaling your joint.
Hope that helps.