Your problem is in specifying the translation for joint_c. You have it translated along the Z axis of joint_b, which is apparently where you want it in WORLD (not local) coordinates. If you want joint_c to be "inline" with joint_b in the bind pose without regard to joint_b's rotation, you want to translate joint_c along joint_b's primary axis, which appears to be the X axis, not the Z. Joint_b's rotation will then rotate joint_c into the position shown on the left.
As questioned before, it's not clear what data you're using to render the images. You should show what you're actually getting, in addition to what you want. If joint_c is translated locally +2 along the Z-axis, then (by it's parent's orientation) rotated -pi/2 about the Y-axis to (-2, 0, 0), then translated +2 along the X-axis, it would appear at the origin, not (2,0,2) as you've shown. If joint_c is, instead, translated locally +2 along the X-axis, then it would be rotated to (0, 0, 2) and translated to (2, 0, 2).
Some tough love: In general, it's a lot easier to debug using actual data than "Here's what I want. My code doesn't work. What's wrong?"
By the way, in the code you've posted, you've still got re-used variables that makes it difficult to review, I'm afraid. To repeat, I would suggest you not re-use variables until (or even after) you've got the process well established. In this case, you're using bind-pose transforms to create animation transforms. Yeah, it appears to be "efficient" but, for review purposes, it requires going back and forth to check values and checking whether you've got trans*rot rather than rot*trans, etc.
The animation matrix (before combining) for each joint should be a local animation transform with respect to the joint's parent. It should reflect the animated orientation of the joint. However, you set the anim transform for joint_b to identity. Yeah, you're using the local transform to create an animation transform. But (I repeat) I'm suggesting you NOT REUSE variables until you get the process well understood. Later, when you create other animation sequences, you don't want to use bind-pose transforms mixed in with animation transforms.
For testing, it appears you want joint_b to be in the same orientation as it has in the bind pose. So code it again! Don't use the bind-pose transforms. For joint_b, in this particular situation, it may work, but setup the routine for the more general case.
Similarly, the local animation transform for joint_c should be the local rotation matrix times the local translation matrix. Don't use the bind-pose transforms. And, in this case, it appears you've coded joint_c translated along the WORLD Z-axis, instead of joint_b's local axis.
And.. in your D3DXVec3TransformCoord you re-use variables. I know that's for testing, but, eventually, in the shader, the input vertex will be transformed to an output vertex, not overwritten.