Is there a generic custom data layer?
Here is a little panel I took from my project. As far as I understood, that's what you need.

class WowWMOGroupPanel(bpy.types.Panel):
    bl_space_type = "PROPERTIES" # This defines where our panel should appear
    bl_region_type = "WINDOW"
    bl_context = "object" # This defines the mode in which it appears. In our case, it is object. However, could be "edit" or any other mode.and
    bl_label = "Wow WMO group" # Label and property ID name
    bl_options = {'DEFAULT_CLOSED'}

    def draw_header(self, context):
        layout = self.layout
        self.layout.prop(context.object.WowWMOGroup, "Enabled") # This makes the panel toggleable.

    def draw(self, context):
        layout = self.layout
        row = layout.row()
        self.layout.prop(context.object.WowWMOGroup, "GroupName") # This is our text input property

        layout.enabled = context.object.WowWMOGroup.Enabled # Enables everything in layout if checkbox is enabled

    @classmethod
    def poll(cls, context):
        # check if it is object and mesh
        return (context.object is not None and context.object.data is not None and isinstance(context.object.data,bpy.types.Mesh)) 



class WowWMOGroupPropertyGroup(bpy.types.PropertyGroup):
    Enabled = bpy.props.BoolProperty(name="", description="Enable wow WMO group properties")
    GroupName = bpy.props.StringProperty() # our string input!

def RegisterWowWMOGroupProperties():
    bpy.types.Object.WowWMOGroup = bpy.props.PointerProperty(type=WowWMOGroupPropertyGroup)

def UnregisterWowWMOGroupProperties():
    bpy.types.Object.WowWMOGroup = None

# After doing this you can adress your property as bpy.context.scene.objects[some_id_or_name].WowWMOGroup.GroupName