I've finally made a little bit of headway into what I think is going on.
You may or may not recall a while back I was worried about bones with "translation" data of (0, 0, 0), of which there are five in Serge's armature data, including in all four of his appendages. I figured out that a pretty good solution seemed to be to give these bones the translation data of its child bone. It turns out that I should not have stopped there.
For example, take Serge's arm which is not holding the swallow. The translation data as read from the model file is (180, 2, -115), (0, 0, 0), (118, 0, 0), and (135, 0, 0), representing the shoulder, upper arm, lower arm, and hand, respectively. My correction explained above would adjust this to (180, 2, -115), (118, 0, 0), (118, 0, 0), and (135, 0, 0). Now I am thinking that it should be (180, 2, -115), (118, 0, 0), (135, 0, 0), and (?, ?, ?). The question remains of what to do with the last bone's length.
When you do it this new way Serge's forearm bone actually ends in his hand instead of at the tip of his glove, which makes more sense considering the way the vertices are assigned. Ditto for the other appendages; see picture.
EDIT: I am also starting to think that there are two issues to deal with. Remember that the joint data is, as I'm currently trying to use it, for both transforming the vertex data and generating bone information. I've found that I've had to make modifications to the joint data after transforming the vertices but before generating the bones. It seems that the rotations aren't being applied to the vertices or the bones correctly, but the translation data as provided is correctly translating the vertices to their correct positions, but giving wrong bone lengths.
[attachment deleted by admin]