Apart from non-normalised matrices with no rotation in them, can we get the scale values from a matrix ?
Sure, just treat the columns as vectors and compute their lengths.
If you have a generic matrix like this one
r0 r3 r6 t0 r1 r4 r7 t1 r2 r5 r8 t2 0 0 0 1
XScale = sqrt(r0r0+r3r3+r6r6);
YScale = sqrt(r1r1+r4r4+r7r7);
ZScale = sqrt(r2r2+r5r5+r8*r8);