This approach still works. Subscript the list first to get a new list with only the axis boxes you want to change, then send the messages to that target list. This way is still much easier and cleaner than explicit looping.
Here is a modification to my first example to illustrate the new approach:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
sm = dt << Scatterplot Matrix(
Y( :Age, :Weight, :Oxy, :Runtime, :RunPulse, :RstPulse, :MaxPulse ),
Matrix Format( "Lower Triangular" )
);
// change X axes only in Scatterplot Matrix
axes = Report( sm ) << XPath( "//AxisBox" );
nAxes = N Items( axes );
// second half of list only
axes[((nAxes/2)+1)::nAxes] << Select; // Scale( "Log" );
It doesn't work well with the Scatterplot Matrix, though, because all but one data column is used in the X and Y role, and internal logic tries to keep changes consistent in both places (X and Y role).