GPUs tend to compute both sides of an 'if' statement (true and false cases) then after it has done this it picks the side that matches the 'if' statement outcome. It does this because of how parallel processing is handled and doesn't really behave like 'if' statements on the CPU. So my guess would be your having errors because it's reading uninitialized data from "a_Deformers" then accessing data beyond the array bounds of "u_XFormMatrix". Try giving your data default values and see if your errors continue.
For example, when a mesh doesn't need skinning set all values of "a_Deformers" to zero, that way its elements are within your array bounds of "40".