Where to prop_search for vertex groups?
here a simple answer using one of the TextEditor -> Python templates:

import bpy


class LayoutDemoPanel(bpy.types.Panel):
    """Creates a Panel in the scene context of the properties editor"""
    bl_label = "Layout Demo2"
    bl_idname = "SCENE_PT_layout"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "scene"

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

        scn = context.scene
        row = layout.row()
        row.prop_search(scn, "vgr", context.active_object, "vertex_groups", text="Density")

def register():
    bpy.utils.register_class(LayoutDemoPanel)
    bpy.types.Scene.vgr = bpy.props.StringProperty(name="vertex_group_density")


def unregister():
    bpy.utils.unregister_class(LayoutDemoPanel)
    del bpy.types.Scene.vgr


if __name__ == "__main__":
    register()




Here we use 


bpy.types.Scene.vgr to register a StringProperty to keep the string name of the prop_search choice. 
Accessing the 'vertex_group' happens by passing an object reference, this can be done by using context.active_object or ob if you alias it earlier in the code.. you could have something like:

ob = bpy.data.objects[some_object_name]
row.prop_search(scn, "vgr", ob, "vertex_groups", text="Density")