I'm sure you could use an inverse sine curve to figure out the x axis stretching as well.
My main computer died on me so I can't really test this out in Game Maker directly but the algorithm for scaling the surface would probably look something like:
for (i=0; i<view width; i+=1)
{
t=i/view width;
dx=arcsin(t*2-1)/pi+.5
y_scale=1+(1-sin(t*pi)*effect multiplier)
draw_surface_part_ext(surface, dx, 0, 1, view height, i, y_scale/2*view height, 1, y_scale, c_white, 1)
}
Replace the variables view width, view height, surface, and effect multiplier with corresponding values. Effect multiplier is going to change how much the view gets stretched vertically, something like .5 or less would probably be appropriate.