It does work for me. (Oh, note that if your matrix has translation included in it, it will be used in scaling aswell. You need to multiply rotation matrix in different function without translation part)
[pascal]procedure Scale(var M: TMatrix; const v: TVector); overload;
var M2: TMatrix;
begin
M2:=NewMatrix;
M2[0,0]:=v.x; M2[1,1]:=v.y; M2[2,2]:=v.z;
M:=Multiply(M,M2);
end;

// call it like this to triple size in Y direction:
Scale(m2,vector(1,3,1));

// if you use this kind of vector nothing will happen as intended
Scale(m2,vector(1,1,1));[/pascal]