Apply transforms to linked objects?
Vader's solution works, but I think this modified version is slightly more efficient because it only unlinks the active object:

import bpy

selected=[]
# de-select all selected objects and add to array:
for obj in bpy.context.selected_editable_objects:
    selected.append(obj)
    obj.select = False
# reselect active object
bpy.context.object.select = True
# Make single user and apply scale
bpy.ops.object.make_single_user(type='SELECTED_OBJECTS', object=True, obdata=True, material=True, texture=True, animation=True)
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)

# select objects again
for obj in selected:
    obj.select = True
    # reset scale
    obj.scale = 1,1,1
# link selected to active
bpy.ops.object.make_links_data(type='OBDATA')