This is what we are going to do:

New Document

Create a circle any color you want with the oval tool. Select the circle and in the properties panel (window>properties>properties) set the width and height (W and H) to 20. Select again the circle and convert it to a movie clip (modify>convert to simbol or F8). Name: ball, set the type of the symbol to movie clip and set the registration point to the upper left corner. Double click the symbol (either on the library or the one that it's on the stage). Inside de movie clip 'ball', create a new layer above the one that holds the circle. On the new layer create a text field that fits the ball, i used verdana, size 10 and the text field size is W:19, H:16. The color of the text should be different from the background of the ball. Set it to center alignment, dinamic text, instance name: character_txt (it's good to add to the instances names the termination _txt to text fields, _mc to movie clips and _btn to buttons). Right clic the ball symbol in the library and select 'linkage...'. Export for action script and Export in first frame must be checked. Identifier: ball. Click OK.

Ok, we are done with the ball, now let's make the mouse trail. Create a new symbol (insert>new symbol or Ctrl+F8). Name: mouse trail. Select the first frame of this new symbol, open the actions panel (window>actions or F9) and paste this actions:

myText="::Stoma:: Mouse Trail";
textLength=myText.length;
for(i=1;i<=textLength;i++){
this.attachMovie("ball","newball"+i,i);
nb=this["newball"+i];
nb._x=_xmouse+nb._width*i+2;
nb._y=_ymouse;
char=myText.charAt(i-1);
if(char==" "){
nb._visible=false;
}else{
nb.character_txt.text=char;
nb.character_txt.selectable=false;
}
}
function mouseTrail(level){
for(i=1;i<=textLength;i++){
nb=level["newball"+i];
previousnb=level["newball"+(i-1)];
if(i==1){
finalx=_xmouse+nb._width+2;
nb._x+=(finalx-nb._x)/3;
nb._y+=(_ymouse-nb._y)/3;
}else{
finalx=previousnb._x+nb._width;
finaly=previousnb._y;
nb._x+=(finalx-nb._x)/3;
nb._y+=(finaly-nb._y)/3;
}
}
}
Interval=setInterval(mouseTrail,15,this);

myText="::Stoma:: Mouse Trail": this is the text we want to display on the trail. Then we are going to change this line.
textLength=myText.length: pretty obvious, isn't it?
for(i=1;i<=textLength;i++){: we start a 'for' loop. This means that the actions that are inside the for loop will be repeated until the condition is false (starting from 1 (i=1), it will add one every time (i++) until the condition is false, that would be, when i>textLength). If you haven't realized yet, the actions inside the loop will be repeated as many times as characters our text has.

Actions inside the loop:

this.attachMovie("ball","newball"+i,i): we attach to the movie clip (this) the movie clip that it's in the library (ball. Note: the name that appears in the library has nothing to do with the name we use here. The name we use here is the name we put as identifier in the linkage window). We give a new name to the new ball: "newball"+i, that means that when i=1, we will have an instance of 'ball' called 'newball1', when i=2, another instance of 'ball' called 'newball2' and so on. next parameter is the depth, every instance must have a diferent depth.

nb=this["newball"+i]: this is like setting a shortcut. When we want to change some property of the new instances, as they have different names depending on the length of the text, we have to call them this["newball"+i], where this refers to the movie clip. Flash evaluates and brings the value of what is inside the '[ ]'. So, when i=1, nb=this.newball1, when i=2, nb=this.newball2, etc.

nb._x=_xmouse+nb._width*i+2: we set the initial x position of the balls (depending on the mouse position)
nb._y=_ymouse: we set the initial y position of the balls (depending on the mouse position)

char=myText.charAt(i-1): we get the character of the position we want. when i=1, we get the first character. You may wonder why i put 'i-1', this is very simple: as it is zero based, the first character is the one in the position 0. If we want to know what's the third letter, we shoul write myText.charAt(2)

if(char==" "){: if we found a space character, then:
nb._visible=false: i don't want an empty circle, so i make it invisible.
}else{: if it is any other character but a space...
nb.character_txt.text=char: we assign the textfield we created the correct character
nb.character_txt.selectable=false i don't want the textfield to be selectable

No more actions inside the loop. These were the initial settings, now we want them to move following the mouse. Here's the function in charge of that:

function mouseTrail(level){: we declare a function called mouseTrail and with one parameter: level
for(i=1;i<=textLength;i++){: already explained this
nb=level["newball"+i]: and this too
previousnb=level["newball"+(i-1)]: this is similar to nb, but we are refering to the previous ball, shall we say the left ball
if(i==1){: if i equals to 1, that means that there is no left ball for him, so we tell him to follow the mouse:
finalx=_xmouse+nb._width+2; this is the x position we want the ball to end
nb._x+=(finalx-nb._x)/3; if we don't put this, the ball will follow the mouse but as if it was part of the mouse (try changing this with nb._x=finalx to understand what i mean). To the x position of the ball, we add the difference between the final position and the actual position divided by 3. Again, if we don't divided by 3, the ball will get to the final position really fast. I don't know really well how to explain it, just see what happens if you don't divided by 3 (or any number, the bigger the number, the slower and smoother the animation will be) and you will understand what i mean.
nb._y+=(_ymouse-nb._y)/3 same thing but with the y position
}else{ if i doesn't equal 1...
finalx=previousnb._x+nb._width: now the final position depends on the x position of the left ball, and we have to add the width of the ball or the ball are going to be all in the same position and we don't want that.
finaly=previousnb._y; same thing but with the y position. This time we do want the balls to have all the same y position
nb._x+=(finalx-nb._x)/3; the same as before
nb._y+=(finaly-nb._y)/3; ditto

well, this is pretty good, but we are missing one thing, the most important, we have to call our function!!! and when we have to call it?? the answer is: everytime, so we add this final line:

Interval=setInterval(mouseTrail,15,this): setInterval calls the mouseTrail function every 15 miliseconds and with the parameter 'this'. If interval is less than the SWF file's frame rate (for example, 10 frames per second [fps] is equal to 100 millisecond intervals), the interval function is called as close in time to the value of interval as possible. Executing long, memory-intensive scripts during an interval causes delays. I put the frame rate in 24. To set the frame rate go to Modify>Document and set the frame rate to 24. Note: if you set the frame rate to a higher number, the animation wont go faster since the interval is always the same (every 15 miliseconds).

Well, all you have to do is put an instance of the movie clip 'mouse trail' and test the movie.

You may want to use the mouse trail in diferent parts of the movie and with diferent texts, this problem could be solved this way:

delete this line of the code: myText="::Stoma:: Mouse Trail"

put the instance of the mouse trail movie clip in the stage or another movie clip or wherever you want, clic the movie clip, open the actions panel (window>actions) and paste this actions:

onClipEvent(load){
myText="another text"
}

And that's it, you can use the some clip in diferents parts of the movie with diferent texts without any problem, enjoy it!