1) I started off by adding a record ID, isolating the part of the string containing the date and removing redundant characters:

2) I then used a formula tool to create three streams corresponding to the different date formats, first using Regex to test if the first character was a digit, which enabled me to identify the [Mon dd yyyy] strings, and for those where this was not the case using FindString to check if the last four characters contained a hype, which enabled me to identify [dd-Mon-yyyy] and [dd-Mon-yy]. These streams then fed into an appropriately configured DateTime tool.

3) Finally a bit of column cleaning and joined back to the original dataset using the record ID.
