1) common sense - иначе вышестоящий фильтр не узнает закончилась ли отправка
2) common practice - https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_gzip_filter_module.c#L621 и ещё 10 модулей возвращают NGX_DONE
3) документация - "NGX_DONE — Operation complete or continued elsewhere. Also used as an alternative success code" и более никаких объяснений, в каких случаях фильтр может его возвращать. В http://nginx.org/en/docs/dev/development_guide.html#http_building_filter_modules описано только 2 случая - возврат NGX_ERROR и возврат значения полученного от следующего фильтра. Если следовать этому, то из каких соображений можно было бы вернуть NGX_OK?