bl_context multiple areas
AFAIK not directly.  Often use type(...) to register multiple classes. Code below will register a panel with "material", "object" and "data" bl_context, based on your myPanel class definition.

import bpy
from bpy.utils import register_class

class myPanel(bpy.types.Panel):
    bl_label = "My Multi-Panel"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'


    def draw(self, context):
        layout = self.layout

        scene = context.scene

        row = layout.row()

        row = layout.row(align=True)
        row.operator("wm.splash", text="Button")

contexts = ["material", "object", "data"]

for c in contexts:
    propdic = {"bl_idname": "mypanel.%s" % c,
               "bl_context": c,
               }
    MyPanel = type("My%sPanel" % c, (myPanel,), propdic)
    register_class(MyPanel)


Another method would be to make a list of the panels you want to append / prepend the button to.

import bpy

panels = ["SCENE_PT_scene",
          "OBJECT_PT_context_object",
          "DATA_PT_context_mesh",
          "MATERIAL_PT_context_material",
          "TEXTURE_PT_context_texture",
          "OBJECT_PT_constraints",
          "DATA_PT_modifiers",
          "DATA_PT_context_metaball",
          "WORLD_PT_context_world",
          "DATA_PT_context_lattice",
          "DATA_PT_context_lamp",
          "NODE_PT_active_node_generic",
          "Cycles_PT_context_material"]

def draw_func(self, context):
    layout = self.layout
    layout.operator("object.select_random", text="BUTTON")

for p in panels:
    panel = getattr(bpy.types, p)
    if panel is None:
        continue
    panel.append(draw_func)