It looks as though mixin::with is intended for use in defining classes which add/change behaviors (Dog::Small and Dog::Retriever in your example), while mixin is used in the final consuming class (Dog::Small::Retriever).
But also note that the documentation for mixin::with suggests "Instead of mixins, please consider using traits. See Class::Trait for an implementation." Class::Trait, in turn, is deprecated and suggests Moose::Role.
Oh - you cannot skip the use base 'Dog::Small'
declaration - if you did, your class would not inherit from Dog::Small
(or Dog
).