If you have a linked object from another scene, you won't be able to apply any modifiers to it. You will have to unlink it by clicking the unlink button in the object properties panel and possibly also in the data properties panel.

[![unlink object][1]][1]

If you have two objects, which reference to the same data, you will have to make them a single user.
This is done by either clicking the users icon in the data context. This will make the data single user. Both objects will now be individual copies.

[![make single user][2]][2]

You can also press <kbd>U</kbd> in the 3D viewport, then select **Object & Data**.
[![make single user with shortcut][3]][3]

<h3>Method of linking the objects back together</h3>

 - With the unedited object selected, set the mesh *datablock* in the *Object Data* section of the *Properties Panel* to the edit mesh.
 - Select the unedited objects, then select the edited object. Press <kbd>Ctrl</kbd> + <kbd>L</kbd> and select *Object Data* to link the objects to the same datablock.

[![linking objects][4]][4]

<h3>Apply Modifier to Multi User Python Script</h3>
I have added a script to do exactly what the question describes: *Apply All Modifiers to Multi-User Datablock.*

Just paste this in the text editor, when you want to apply all modifiers to a mesh, hit the run script button of the text editor.

You can resize the text editor until only the RUN SCRIPT button is visible to save space. If you want to add this functionality to Blender, check out [how to add a python addon][5].

    import bpy

    def applyModifierToMultiUser(scene):
        active = scene.objects.active
        if (active == None):
            print("Select an object")
            return
        if (active.type != "MESH"):
            print("Select an mesh object")
            return
        mesh = active.to_mesh(scene, True, 'PREVIEW')
        linked = []
        selected = []
        for obj in bpy.data.objects:
            if obj.data == active.data:
                    linked.append(obj)
        for obj in bpy.context.selected_editable_objects:
            selected.append(obj)
            obj.select = False
        
        for obj in linked:
            obj.select = True
            obj.modifiers.clear()
        active.data = mesh
        bpy.ops.object.make_links_data(type='OBDATA')
        
        for obj in linked:
            obj.select = False
        for obj in selected:
            obj.select = True
    scn = bpy.context.scene
    applyModifierToMultiUser(scn)


  [1]: https://i.sstatic.net/auW2j.gif
  [2]: https://i.sstatic.net/9s4dg.png
  [3]: https://i.sstatic.net/Caswt.gif
  [4]: https://i.sstatic.net/3k8qX.gif
  [5]: https://www.blender.org/api/blender_python_api_2_65_5/info_tutorial_addon.html