Nice article, but it kinda and odd issue.
For example, I have been developing a CMS/templating system( essentially, my own idea of WP). I have coded some control modules to control entries and pages. ( think of them as the dashboard), so for the sake of example I have the following modules
Add entry is self explanatory
The delete entry is just <SELECT> of all the entry IDs is the DB, the FORM action goes back to itself( the same document) and deletes all the IDs passed in the query string
Edit entry is also a <SELECT> but this time the PHP redirects to add entry , with the ID of the entry added to the query string, which tells the script in the add page to fill the form with the data from the DB corresponding to the ID in the query string.
BUT as a nice UI touch, you can delete the entry you are working on from the edit entry module. That is a 'delete this entry' "button" is added to the form. Actually it's a link. I pain painstakingly styled to look like a button, conceptually: <a href="deleteEntry.php?id=".$_GET['id'].">Delete this entry</a>
Coding this as button would have required:
1) js to alter the default action of the form ( Entry.php)
2) making it's own separate form, with the deleteEntry.php?id=xx as its action
3) adding a delete single routine AND code to check that the form was submitted via the delete button
All viable, but not as graceful than just heading straight to deleteEntry.php. Thus it's a case where this both a BUTTON and a link; when the data from one form can grafuly integrate to the processor of another ( submitting and redirecting in one action, w/o any extra php/js)
I did consider that screen readers read it as a LINK and not a button/input like the rest of the form control, but since the context is so direct "delete THIS document" it hardly seems confusing. Leaving only the FOCUS consideration, then again this is beneficial as I don want someone accidentally deleting something by pressing tab/return too quickly .
Touching on attributes, since I only wanted the ID to be passed, then essentially the attributes are written directly into the query string.
I guess what I am saying is that there are SOME legitimate (albeit rare)GRAY areas, in which a link can be a button and vice versa.