This is what we are doing:
THE CUSTOM ACTIVITY
1. I created a new project and referenced the activities.
2. Copy the DefaultTemplate.xaml file, rename to CustomTemplate.xaml and place it in the root of your project (Include it in your project)
3. Build solution
4. Now you can drag anything you want from the activities toolbox into your workflow.
5. Copy the template to the BuildProcessTemplates (and check in) and place the dlls to a Custom Activities folder (or bin folder if you want)
* The way I setup my project was to copy the xaml file to the output folder, then the dll's that are output from the TFS Build Extension get copied to a 'Custom Activities' folder underneath that (you'll see why below)
1. In TFS Explorer go to 'Manage Build Controllers' by right clicking the Builds item in one of your projects
2. Select your build controller (you will need to do this for each controller) and click 'Properties...' over the right hand side.
3. One of the items is 'Version control path to custom assemblies' click the ellipses '...' next to the textbox and browse to the path where your Build Extensions are. We use a Custom Actvities folder underneath our BuildProcessTemplates folder as I detailed
* If the dlls are referenced appropriately, you shouldn't need the CustomTemplate.xaml or the project, but it helps for doing a sanity check.