How to set up a field to provide a publish/unpublish feature?
I would use the Flag module. Excerpt from its project page (bold markup added here):

... Flag is a flexible flagging system that is completely customizable by the administrator. Using this module, the site administrator can provide any number of flags for nodes, comments, users, and any other type of entity. Some possibilities include bookmarks, marking important, friends, or flag as offensive. With extensive views integration, you can create custom lists of popular content or keep tabs on important content.
Flags may be per-user, meaning that each user can mark an item individually, or global, meaning that the item is either marked or it is not marked, and any user who changes that changes it for everyone.
In this way, additional flags (similar to published and sticky) can be put on nodes, or other items, and dealt with by the system however the administration likes.

So by using a &quot;global flag&quot; (whatever you'd call such flag), you could just &quot;mark or do not mark&quot; something as published. If appropriate, you could also consider Attaching fields to flags.
If you're not familiar with the Flag module, checkout the set of 8 video tutorials about the flag module.
Refer to Flag's Community documentation for (way) more details.
PS: near the bottom of the Flags setup is an option 'Display link as field', which will include it as a field, for views, Panels, etc (if that's why you want a field).