In my article, take a look at the section A Slight Diversion from the Initialization Process.
Each bone's animation transform (I think they're the NodeTransformation in the article you referenced) orients the bone LOCALLY. "Locally" means (e.g.) a hand bone rotates about it's own Y-axis a little during an animation. That rotation about the bone's Y-axis is to take place wherever the bone is in the world. Maybe the arm is raised into the air or off to one side. The hand bone moves with the arm, but the rotation is still to take place about the bone's Y-axis, not the world Y-axis.
So, if the vertices around the character's hand are to be rotated about the hand bone's Y-axis, that rotation needs to take place relative to the hand bone, not the world Y-axis. See the illustration in the section of the article I linked. The vertex positions in the mesh around the hand are in world(*) space. The offset matrix transforms the vertex from world space to bone space. The animation (scale-rotate-translate) then takes place in bone space. Then the combined animation transforms move the vertex back to world space for rendering.
(*) that's really root-node space. I'm calling it "world" to give you a better visualization.