Вот попробовал сделать по тем советам что получил. Вроде бы работает корректно, посмотрите пожлуйста все ли верно и может можно что нибудь оптимизировать. В частности использование аттачмуви вместо дубликейт.

Код AS1/AS2:
import mx.transitions.Tween;
import mx.transitions.easing.*;
// массив с данными
var my_array = ['Angelina Jolie', 'Charlize Theron', 'Памелла Андерсон', 'Бритни гг'];
var clip_array:Array = new Array(); // будущий массив кнопок
var total_j:Number;
var i:Number = 0;
var j:Number = 0;
var offset_j:Number = 0;
but._visible = false; // танец с бубном ;) Итак что же мы получаем, при дубликации обьекта, исходный то у нас тоже отображается, что не есть гут. Поэтому прячем его.
function whois(j){
// обращение к данным из массива по ключу
trace('Today I love ' + my_array[j]);
}
function create_buttons(j) // cсоздаем кнопки, не знаю как это назвать (j)
{
clip_array[j] = but.duplicateMovieClip("but"+j, j); // присваиваем массиву значения кнопок
clip_array[j]._visible = true; // танец с бубном часть 2 ;) А затем показываем уже дублицированный, конечно можно было аттачить, но я пока этим не пользуюсь.
clip_array[j].onRelease = function()
{
for ( i = j; i < 4; i++)
{
if(!this.flag){
var tween_1alphadown:Tween = new Tween(clip_array[i + 1], "_alpha", Strong.easeOut, 0, 100, 1, true);
}
else{
var tween_1alphaup:Tween = new Tween(clip_array[i + 1], "_alpha", Strong.easeOut, 0, 100, 1, true);
}
this.flag = !this.flag;
}
whois(this.mark); // ваш пример
}
if (j>0) { clip_array[j]._y = offset_j; } // расчитывем расстояние до след раздела
else { clip_array[j]._y = j * offset_j; }
offset_j = clip_array[j]._y + clip_array[j]._height + 5; // 5 это межкнопочное расстояние
}
for( j = 0; j < 4; j++)
{
create_buttons(j) // сделал функцию как говорили
}
На рабочем столе (имею в виду рабочий стол флеша, а не винды) есть прямоугольник под именем but и инстанс нейм тоже but/