Я собственно другой глюк имел в виду.
as

Код:
class Test{
public static var arr:Array = [];
public var arr2:Array = [];
public var id:String;
public function Test( id:String ){
arr.push( this );
arr2.push(this);
this.id = id;
}
public function toString():String{
return 'Test '+ id;
}
}
fla

Код:
import Test;
var t1:Test = new Test('t1');
var t2:Test = new Test('t2');
trace( Test.arr );
trace('----------');
trace( t1.arr2 );
trace('----------');
trace( t2.arr2 );
trace('----------');
trace

Код:
Test t1,Test t2
----------
Test t1,Test t2
----------
Test t1,Test t2
----------
Попытка оттрейсить Test.arr2 вызовет ошибку - то есть свойство как бы не статичное.
А по вашему вопросу - можно так:
as

Код:
class Test{
public static var ref:Test = Test.createRef();
public var id:String;
public static function createRef():Test{
trace('ссылка создана');
return new Test('etalon');
}
public function Test( id:String ){
this.id = id;
}
public function toString():String{
return 'Test '+ id;
}
}
fla

Код:
import Test;
var t1:Test = new Test('t1');
trace( Test.ref );
var t2:Test = new Test('t2');
trace( Test.ref );
P.S. что такое синглтон, сорри, не знаю. Гуглить лень.