Как-то так. На производительность не проверял.

Код AS1/AS2:
function separateDigitStr(str : String, delimiter : String = ".", count : int = 3):String{
// assert
if(count < 1){
throw new ArgumentError("Количество знаков между разделителями должно быть больше нуля.");
}
//
var nSeparates : uint = Math.ceil(str.length/count)-1;
var shift : uint = str.length%count;
var head : String = "";
if(nSeparates && shift){
head = str.substr(0, shift) + delimiter
str = str.substr(shift);
nSeparates--;
}
for(var i : int = 0; i < nSeparates; i++){
str = str.substr(0, count*(i+1) + i) + delimiter + str.substr(count*(i+1) + i);
}
return head + str;
}