I saw some discussions in SO like this one saying there's no such thing as events in WCF.
On the other hand, I was following this tutorial and got to the 'events' section.
Is the code in the tutorial considered a bad practice?
This is not bad practice but those events will be used (consumed) on server (service) side host-process only (when service class/contract interface accessible directly). Standard WCF-clients don't know about those events which are not reflected in auto-generated client proxies.
But you can use service contract interface with events to constrain custom client proxies (aka service/server agents) if raw interface definition is accessible on client.