Tramite feature è possibile deployare delle custom action per SharePoint 2010 da posizionare nella ribbon o sul menù contestuale (ECB).

L'xml da inserire nella feature per avere una voce nel menù contestuale è il seguente:
<!-- custon actions ECB -->
<CustomAction Id="SgartEdit"
    RegistrationType="ContentType"
    RegistrationId="0x010068EBA7A1B34244179CA55599D440E1E0"
    Location="EditControlBlock"
    Sequence="450"
    Title="Edit"
    Description="Edit single"
    Rights="EditListItems"
    ImageUrl="/_Layouts/images/sgart/edit16.png">
    <UrlAction Url="javascript:location.href='{SiteUrl}/_Layouts/sgart/Edit.aspx?SgartID={ItemId}&Source={Source}'" />
</CustomAction>
Attenzione di tutti gli & (ampersand) nella url va fatto l'escape & amp;
In questo caso la voce è associata solo a uno specifico content type (attributi RegistrationType e RegistrationId).

Per avere la stessa funzionalità anche nella ribbon puoi usare questo xml:
<CustomAction Id="SgartEditRibbon" 
  RegistrationType="ContentType"
  RegistrationId="0x010068EBA7A1B34244179CA55599D440E1E0"
  Location="CommandUI.Ribbon.ListView" 
  Title="Edit Questions">
  <CommandUIExtension>
    <CommandUIDefinitions>
      <CommandUIDefinition Location="Ribbon.ListItem.Actions.Controls._children">
        <Button Id="Ribbon.Items.Actions.EditQuestion" 
            Sequence="100"
            Command="Sgart_Cmd_Edit"
            Image32by32="~site/_layouts/images/sgart/edit32.png"
            Image16by16="~site/_layouts/images/sgart/edit16.png"
            LabelText="Edit Questions"
            TemplateAlias="o1" />
      </CommandUIDefinition>
    </CommandUIDefinitions>
    <CommandUIHandlers>
      <CommandUIHandler
       Command="Sgart_Cmd_Edit"
       CommandAction="javascript:location.href='{SiteUrl}/_Layouts/sgart/Edit.aspx?SgartID={SelectedItemId}&Source={Source}'"
       EnabledScript="javascript:
         function enableSgartCmdEdit()
         {
           var items = SP.ListOperation.Selection.getSelectedItems();
           return (items.length == 1);
         }
         enableSgartCmdEdit();"
       />
    </CommandUIHandlers>
  </CommandUIExtension>
</CustomAction>
In questo caso la cosa da notare è l'attributo EnabledScript che tramite una funzione Javascript determina l'abilitazione o meno dell'icona in base al numero di elementi selezionati (deve ritornare un boolean). In questo caso viene attivata solo se è selezionato un singolo list item. Vedi anche Gestione dell'abilitazione di un bottone sulla ribbon in base al content type.
Attenzione, le lettere presenti nel RegistrationId devono exxere tutte maiuscole ad eccezione della x.

Quindi questo è corretto: 0x010068EBA7A1B34244179CA55599D440E1E0

questi no: 0x010068EBA7A1B34244179CA55599d440e1e0, 0X010068EBA7A1B34244179CA55599D440E1E0

I tag disponibili nella CommandAction sono:
  • {ItemId} : ID (GUID) taken from the list view
  • {ItemUrl} : Web-relative URL of the list item (Url)
  • {RecurrenceId} : ID of a recurrent item (RecurrenceID)
  • {SiteUrl} : The fully qualified URL to the site (Url)
  • {ListId} : ID (GUID) of the list (ID)
  • {ListUrlDir} : Server-relative URL of the site plus the list's folder
  • {Source} : Fully qualified request URL
  • {SelectedListId} : ID (GUID) of the list that is currently selected from a list view
  • {SelectedItemId} : ID of the item that is currently selected from the list view

Ed infine una custom action generica sulla ribbon non legata a uno specifico list item:
<CustomAction Id="SgartCopyRibbon"
  RegistrationType="ContentType"
  RegistrationId="0x010068EBA7A1B34244179CA55599D440E1E0"
  Location="CommandUI.Ribbon.ListView"
  Title="Copy from">
  <CommandUIExtension>
    <CommandUIDefinitions>
      <CommandUIDefinition Location="Ribbon.ListItem.New.Controls._children">
        <Button Id="Ribbon.Items.New.SgartCopy"
            Sequence="110"
            Command="Sgart_Cmd_Copy"
            Image32by32="/_layouts/images/sgart/copy32.png"
            Image16by16="/_layouts/images/sgart/copy16.png"
            LabelText="Copy"
            TemplateAlias="o1" />
      </CommandUIDefinition>
    </CommandUIDefinitions>
    <CommandUIHandlers>
      <CommandUIHandler
       Command="Sgart_Cmd_Copy"
       CommandAction="javascript:location.href='{SiteUrl}/_Layouts/sgart/CopyFrom.aspx?SgartListID={ListId}&Source={Source}'"
       />
    </CommandUIHandlers>
  </CommandUIExtension>
</CustomAction>

Vedi anche Custom Action Definition Schema