Is it possible to execute an add-on when choosing 'New' to open the default file?
You can capture the event like:

import bpy
from bpy.app.handlers import persistent

@persistent
def new_file_handler(scene):
    if not bpy.data.filepath:
        print("New file!")

bpy.app.handlers.load_post.append(new_file_handler)


In order to run a popup dialog, a little hack is required to delay the operator invocation (because there's no valid context for a dialog at the time of the load_post callback):

bl_info = {
    "name": "New file prompt",
    "author": "CoDEmanX",
    "version": (1, 0),
    "blender": (2, 69, 0),
    "location": "File &gt; New",
    "description": "Open a popup dialog after a new blend is created",
    "warning": "",
    "wiki_url": "",
    "tracker_url": "",
    "category": "System"}

import bpy
from bpy.app.handlers import persistent

class SimpleOperator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.simple_operator"
    bl_label = "Simple Object Operator"
    bl_options = {'REGISTER', 'UNDO'} #?

    prop = bpy.props.StringProperty(name="Material", maxlen=63)
    mats = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)

    @classmethod
    def poll(cls, context):
        return not context.blend_data.filepath

    def execute(self, context):
        print(self.prop)
        return {'FINISHED'}

    def draw(self, context):
        layout = self.layout
        layout.prop_search(self, "prop", self, "mats", icon='MATERIAL')

    def invoke(self, context, event):
        self.mats.clear()
        for i in range(1, 7):
            self.mats.add().name = "Material %i" % i
        return context.window_manager.invoke_props_dialog(self)

@persistent
def scene_update_handler(scene):
    bpy.app.handlers.scene_update_pre.remove(scene_update_handler)
    bpy.ops.object.simple_operator('INVOKE_DEFAULT')


@persistent
def new_file_handler(scene):
    if not bpy.data.filepath:
        print("New file!")
        bpy.app.handlers.scene_update_pre.append(scene_update_handler)


def register():
    bpy.utils.register_class(SimpleOperator)
    bpy.app.handlers.load_post.append(new_file_handler) 


def unregister():
    bpy.utils.unregister_class(SimpleOperator)
    bpy.app.handlers.load_post.remove(new_file_handler) 


if __name__ == "__main__":
    register()


You may want to remove

bl_options = {'REGISTER', 'UNDO'}


so it doesn't appear in the Redo panel afterwards.

It also shows the dialog on Blender startup (needs to be installed as addon and enabled by default). This may not work with older versions, which did not trigger load events for the startup.blend. Note that the dialog may overlay the splashscreen, but there's no real problem with that.