You can't embed the for loop in the launch script.I think the alternatives are to create the launch script as an expression, using a loop to append items to it, or start with a plain launch script and then send modification messages to it. Here's a script that shows the latter way to do it, which is what SendToReport is doing anyway in the original script.
The commented-out line uses xpath to get the scale box by ID, but that only works in later JMPs. In JMP 12, you'll have to indentify the scale box by index, which is 5. You can find that out by using Show Tree Structure.
Open("$SAMPLE_DATA/Big Class.jmp");
x_axis={:height};
y_axis={:weight};
overlay_col={:age};
nitems = 6;
gb = Graph Builder(
Variables( X( x_axis[1] ), Y( y_axis[1] ), Overlay( overlay_col[1] )),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 9 ) ) )
);
//sb = (report(gb) << xpath("//ScaleBox[@ID='400']"))[1];
sb = report(gb)[ScaleBox(5)]; // JMP 12
For(i=0, i < NItems, i+=1,
sb << Legend Model(3, Properties(i, {Transparency(0.2)}));
);