Yea at first we thought of doing it inside Spine but abandoned that idea because our game will have multiple playable characters which players can customize from big list of items to multiple slots so all those spine projects could end up in total of hundreds of images instead of 1 pool where all those images are in.  And those items will be purchasable trough the shop.
 
Pharan, that script you provided seems just what we want to achieve except it has problems with Unity sprite; 
error CS0029: Cannot implicitly convert type Spine.Unity.Modules.SpriteAttachmentLoader' toUnityEngine.Sprite'
After that I tried accessing directly to SpriteAttacher using this line of code
spriteAttacher = GetComponentInChildren<SpriteAttacher>();
Sprite sprite = Resources.Load<Sprite>("shop/" + hatImageName);
spriteAttacher.sprite = sprite;
spriteAttacher.slot = "Head";
but it also provides with this kind of error;
NullReferenceException: Object reference not set to an instance of an object
Spine.Unity.Modules.SpriteAttachmentLoader..ctor (UnityEngine.Sprite sprite, UnityEngine.Shader shader) (at Assets/spine-unity/Modules/SpriteAttacher.cs:86)
Spine.Unity.Modules.SpriteAttacher.Attach () (at Assets/spine-unity/Modules/SpriteAttacher.cs:59)
Spine.Unity.Modules.SpriteAttacher.Start () (at Assets/spine-unity/Modules/SpriteAttacher.cs:51)
EDIT:
 
Okay so I got it working with;
        skeletonRenderer.skeleton.AttachUnitySprite("Hat", sprite);
but the images are slightly distorted and way too big. I've made the slot and bone in Spine and looked that those exact images look good there on that bone and on that slot with the same animation. I think this might be problem on the way Unity packs the sprites? Any idea how to fix that.