If you have an action that you don't want to have any interceptors, if there is a defaultStack defined, you can't.
My work around was to create an NoOpInterceptor that did nothing, and then declare interceptor stack that just included it to use.
It used to be that you couldn't include an empty interceptor stack at all. That seems to not blow up now, but unfortunately it appears that it is treated as if it doesn't exist, and the defaultStack is used instead.
I think a declared interceptor stack on an action should override the default, even if it is empty.
Could then also provide an "emptyStack" interceptor in struts-default.xml that people could use when they wanted this behavior.