Now it works as it should. I took shaders (except lighting model) from source for a video tutorial series from ThinMatrix. It works fine for ThinMatrix. This means that for some reason its lighting model is not affected by the translation of the normal vector. It will be necessary to figure out later why he does not have this problem. I made the transfer of the array of rotation matrices a separate uniform:
One way to explain this behavior is if aNormal.w == 0 in that example but aNormal.w == 1 (or at least is non-zero) in your code. The former would be a much simpler way to ensure that aNormal is only rotated and not translated when multiplied by jointTransform.
That is, simpler compared what you ended up doing: extracting and passing in separate rotation-only matrices in uniforms.
You could alternatively have just taken the upper-left 3x3 of those transform matrices with a mat3() cast in the shader and multiplied that by aNormal.xyz. Or just forced the w-component to be zero in the shader code before doing the mat4x4 multiply with: