You can have full control of axes positioning by giving it a bounding box in normalised coordinates (on construction). The format is [left, top, width, height].
An example of how I would go about setting up the figure:
import matplotlib.pyplot as plt
left = 0.1
width = 0.8
ax1 = plt.axes([left, 0.5, width, 0.45])
ax2 = plt.axes([left, 0.3, width, 0.19])
ax3 = plt.axes([left, 0.2, width, 0.09], sharex=ax2)
ax4 = plt.axes([left, 0.1, width, 0.09], sharex=ax2)
# ticks at the top of the top plot
ax1.xaxis.tick_top()
# remove ticks for ax2 and ax3
ax2.xaxis.set_visible(False)
ax3.xaxis.set_visible(False)
# only put ticks on the bottom of ax4
ax4.xaxis.tick_bottom()
plt.show()
I've added some functionality which you might find useful (removing the top ticks, sharing the xaxis, moving the ticks to the top of an Axes).
The result:
HTH