Yes, the article kind of describes the default behaviour, but after the initial source/sink selection one end or the other can then independently request power role swaps and data role swaps, which the other end can either accept or reject.
For example if you ask a USB-C power brick to let you swap to providing it power, it will reject that. Then some devices (like phones, tablets etc.) will only accept power when they're switched off, but will do either when they’re on. But some will happily let you switch to device mode and be a sink when they’re off, until the battery gets below a certain level and then they’ll only accept you providing it power. It all gets quite complex!
The company I work for makes devices that are always in device mode (called upstream facing port or UFP mode) but can provide power when they are plugged in themselves, so have to swap between source and sink. I’ve spent far too long debugging firmware issues with PD controllers because of this!