Mickey, Ultimately I did it this way to avoid the check for btCompoundShape when calculating combinedRestitution/Friction. This format handles every combination compound or single shape without performing that check. This makes btRigidBody::setFriction/Restitution unnecessary. To maintain btRigidBody::setFriction etc one could iterate all shapes and set shape params from input values, but this would be fairly pointless in using multimaterial compound shapes as the entire set ends up with the same parameters. Erwin does addresses this with btMultimaterialCompoundShape.
Erwin, As it is the preferred method I am happy to implement btMultimaterialCompoundShape (has to be on my own time not my works

) I will submit for review when it is done.