Yep, the main thing missing from that code earlier is friction. Add enough friction and the ball will settle down gradually once it arrives at the target, as in avoision2.
It's not very nice movement though. I think I'd do something like this... modifying the code from that tutorial:
predict = 0.2;
x = -(this._x + predict*xp) + centerx ;
y = -(this._y + predict*yp) + centery ;
This predicts where the ball's going to be in 0.2 seconds, then applies force towards the mouse cursor from there
. If the ball's about to shoot past the mouse cursor, it'll begin slowing down in anticipation.
A combination of prediction and friction should make it much more stable. Don't give it too much prediction, though, or it'll lurch back and forth on the way to the cursor.
Here's another fix you can insert after the x= and y= lines and before the xp= and yp= lines:
tangentinertia = 0.7;
offlen = sqrt( x*x + y*y );
towardsp = (xp*x + yp*y)/offlen;
tangentp = (xp*y + yp*-x)/offlen;
tangentp *= tangentinertia;
xp = (towardsp*x + tangentp*y)/offlen;
yp = (towardsp*y + tangentp*-x)/offlen;
This will allow the ball to move freely towards and away from the cursor, but brake its sideways movement when it's trying to orbit.
(How it works: "offlen" is the length of the vector (x,y), so (x/offlen, y/offlen) is a unit length vector which points in the direction to the cursor. We then take the dot product of the ball's movement (xp, yp) with that vector (x/offlen, y/offlen), giving us the speed of the ball's movement towards the cursor (towardsp). We then rotate the vector 90 degrees, giving us (y/offlen, -x/offlen), and take the dotproduct of (xp, yp) with that to give the speed of the ball's movement around the cursor (tangentp).
We then apply friction to (tangentp) only and reverse the above process to convert (towardsp, tangentp) back to speeds along the X and Y axes.)