Three.js: Apply a scale to all children nodes

I need to reset the scale on a specific node while keeping all descendant nodes identical in the world.

In my JSFiddle I have the following tree:

Root => R => C => C2

The scale is set on R. When I apply the scale on descendants, the direct child position is still right, but not its own childs, so I must be missing something

function bakeScale(object) {
    for (var i = 0 ; i < object.children.length; i++) {
        var c = object.children[i];
        c.position.multiply(object.scale);
        c.scale.multiply(object.scale.applyQuaternion(object.quaternion));
        c.scale.x = Math.abs(c.scale.x);
        c.scale.y = Math.abs(c.scale.y);
        bakeScale(c);
    }
    object.scale.set(1,1,1);
    object.updateMatrix();
    object.updateMatrixWorld();
}

I'm aware of Object3D.attach() but I don't want the change the tree structure

PS: bonus points for a method that would also work with baking the rotation