Я понял в чем проблема, у тебя масштабирование изменяется до указанного, а у меня масштабируется масштабированное.
чтоб работало так же нужно sx и sy указать с учетом текущего масштаба * 1 / scale или

Код AS3:
private function scaleAround2 (m:Matrix, p:Point, sx:Number, sy:Number):Matrix
{
sx *= (1 / Math.sqrt(m.a * m.a + m.b * m.b));
sy *= (1 / Math.sqrt(m.d * m.d + m.c * m.c));
var a:Number = m.a * sx;
var b:Number = m.b * sx;
var c:Number = m.c * sy;
var d:Number = m.d * sy;
m.tx += (m.a - a) * p.x + (m.c - c) * p.y;
m.ty += (m.b - b) * p.x + (m.d - d) * p.y;
m.a = a;
m.b = b;
m.c = c;
m.d = d;
return m;
}
ну в общем да