This bookmarklet will mark all of you Twitter direct messages as read simply by deleting the entry in local storage.

The Code:

//Get the URL
var urlistwitter=window.location.href.split('/')[2].split('.'); 

// Check to see if the domain is twitter
if(urlistwitter[urlistwitter.length-2]==='twitter') {

   // remove the local storage item of unread DM references
   localStorage.removeItem('__DM__:lastReadMessageId');
}

// remove the icon that makes them appear unread
document.querySelector('.profile.new').classList.remove('new');

Drag this link to your toolbar. When you need to, click it when your Twitter window has focus to remove the localStorage entry and that annoying blue 'unread' icon:

Mark DMs as Read

Created by @estellevw. Pull request for improvements welcome.