Note, that DisplayObjectContainer has 3 main methods: addChild, removeChild and getChildAt. All other mehtods (addChildAt, contains, getChildIndex, removeChildAt, setChildIndex, swapChildren, swapChildrenAt) are redundant (unnecessary) and can be implemented using 3 main methods above. Adobe added them for convenience, but it doesn't do quite what you're expecting.
Why don't you implement that "weird swapChildren" by yourself, using those 3 methods? Like so:
function weirdSwapChildren(childA:DisplayObject, childB:DisplayObject):void
{
var p1:DisplayObjectContainer = childA.parent;
var p2:DisplayObjectContainer = childB.parent;
var i1:int = p1.getChildIndex(childA);
var i2:int = p2.getChildIndex(childB);
p1.removeChild(childA);
p2.removeChild(childB);
p1.addChildAt(childB, i1);
p2.addChildAt(childA, i2);
}