Resize different sized faces to 1 uniform size?
You could use Smooth and repeat W -> Smooth -> F6 and adjust Smoothing factor and number of Repeats. 

Or a small script - at the end of the script all selected faces will have almost identical area. The orientation and shape are preserved.

import bpy
import bmesh
import math
from math import sqrt

obj = bpy.context.edit_object
me = obj.data
bm = bmesh.from_edit_mesh(me)

face_data = []
area_accum = 0.0
for f in bm.faces:
    if f.select:
        area = f.calc_area()
        if area != 0.0:  # avoid divide by zero
            center = f.calc_center_median_weighted()
            face_data.append((f, area, center))
            area_accum += area

            print(area)

area_average = area_accum / len(face_data)
print("average area is:", area_average)

for f, area, center in face_data:
    rescale = sqrt(area_average / area)
    for l in f.loops:
        v = l.vert
        v.co = ((v.co - center) * rescale) + center

bmesh.update_edit_mesh(me, True)


output:

0.009626750834286213
0.01746169477701187
0.020414138212800026
0.009531363844871521
0.012785278260707855
0.016477763652801514
0.010115167126059532
average_area 0.013773165244076933

# if you ran it a second time all areas are as close as they'll get.
0.013773156329989433
0.013773160986602306
0.013773168437182903
0.013773171231150627
0.01377316378057003
0.013773173093795776
0.013773162849247456


(view this image in a new tab to see the difference in area directly displayed on the polygons)



The above script preserves Shape, but uses a rescale factor to homogenize the Area of all selected Faces. If you need to also make all edge lengths the same while preserving Area and Orientation that's possible too.