We are using a CDN in conjunction with AEM. When a page is published, the CDN cache is not invalidated. Users see the old version of the page until the cache expires.
AEM Publish (Activation) and Dispatcher flush requests do not flush your CDN cache.
Most CDN caches depend on cache headers such as "Cache-Control: max-age=..." to set TTLs. For example, see the Amazon Cloudfront docs.
The Cache-Control headers can be sent from AEM. In addition, you can configure the dispatcher to cache this response header. See this documentation.
Also, for more background on CDNs and AEM, see this presentation that gives some guidance about the AEM Dispatcher and CDN caching.