"In an interesting way, it keeps you from going all-in on object-oriented programming. You only want to create a class when a casual API user will understand how it works and what they would use it for. "
Completely disagree. Python doesn't discourage OO at all. I think the author has a particular programming style with Python that does not line up with the way many people I know use it, and this may give the wrong impressions. Yes, you can just pass around tuples, but ... don't do this :) It has quite workable classes.
So, answering the question? What's the advantage? Dynamic language does require, to a degree, a small amount more tests. However, type errors are also a class of error that is very very infrequently encountered as to a problem.
I'd say that duck typing principly allowers easier mock interfaces and ability to more easily write generic-type functions, and for unrelated reasons, such languages have a very quick code-test loop. But their efficiency in this isn't so much to do with typing. It's mostly the speed of this loop, stemming from a lack of compilation, that helps. Those are not really related, but that's why people like dynamic languages.
They have also been historically more expressive, and saved typing things, for when type errors aren't really common (for me, they aren't), always specifying types doesn't always help. But to be honest, I don't mind it and it's nice to have as documentation most of the time.
I do mind compilation cycles.
The article also seems to err in that it assumes there can't be debuggers available for typed languages, where it says "you can't see inside the process".
The argument that people like dynamic systems because they build programs out of trial and error seems erroneous in all. I build my programs out of tests. This can still happen just the same and has nothing to do with a type system.