Extrude Individual Polygons Proportional to Polygon Area
Here's a bmesh script with adjustable factor (in redo panel):

import bpy
import bmesh

def main(self, context):

    me = context.object.data

    if me.is_editmode:
        bm = bmesh.from_edit_mesh(me)
    else:
        bm = bmesh.new()
        bm.from_mesh(me)

    ret = bmesh.ops.extrude_discrete_faces(bm, faces=[f for f in bm.faces if f.select])

    for f in bm.faces:
        f.select = False

    for f in ret['faces']:
        f.select = True
        vec = f.normal * f.calc_area() * self.factor
        bmesh.ops.translate(bm, vec=vec, verts=f.verts)

    #bm.normal_update()

    if me.is_editmode:
        bmesh.update_edit_mesh(me)
    else:
        bm.to_mesh(me)

    #me.update()


class SimpleOperator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "mesh.extrude_faces_indiv_area"
    bl_label = "Extrude Individual Faces (area-proportional)"
    bl_options = {'REGISTER', 'UNDO'}

    factor = bpy.props.FloatProperty(name="Factor", default=1, soft_min=-100, soft_max=100)

    @classmethod
    def poll(cls, context):
        return (context.object is not None and
                context.object.type == 'MESH')

    def execute(self, context):
        main(self, context)
        return {'FINISHED'}


def menu_func(self, context):
    self.layout.operator(SimpleOperator.bl_idname, text="Individual Faces (area-proportional)")


def register():
    bpy.utils.register_class(SimpleOperator)
    bpy.types.VIEW3D_MT_edit_mesh_extrude.append(menu_func)


def unregister():
    bpy.utils.unregister_class(SimpleOperator)
    bpy.types.VIEW3D_MT_edit_mesh_extrude.remove(menu_func)


if __name__ == "__main__":
    register()


Note that it's pretty slow unfortunately :(

I worry this comes from the translate op for each face (or vec calculation?), don't think this can be made much faster.