I would:
- temporarily subdivide one of the edges of the top face,
- set the snap mode to Vertices,
- set the pivot to Individual Origins
- select the two inner faces as you show on your image,
- G+Y to grab and move and hold Ctrl to enable snapping, and snap to the upper vertex.
- then dissolve the top vertex (X -> Dissolve Vertices)

Here's a cheeky script that lets you mid-align all selected faces, with the Active Face. accepts x,y,z as axis comands.
import bpy
import bmesh
def distribute_and_align(mode, axis):
obj = bpy.context.edit_object
me = obj.data
bm = bmesh.from_edit_mesh(me)
if mode == 'Align_Mid':
a = bm.faces.active.calc_center_median()
amount = getattr(a, axis)
for f in bm.faces:
if f == bm.faces.active:
continue
if f.select == True:
p = f.calc_center_median()
pamount = getattr(p, axis)
diff = amount - pamount
for v in f.verts:
co = v.co
pos = getattr(co, axis)
setattr(co, axis, pos+diff)
bmesh.update_edit_mesh(me, True)
distribute_and_align(mode='Align_Mid', axis='z')
Shift+S> Selection to Cursor (Offset) instead of copying values. – Mr Zak Nov 27 '15 at 14:08